#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int prime[1020];
int v[1020];
int b[1010][1010];
int c[1010];
void get_prime(int n)
{
	int m=0;
	for (int i = 2; i<=n; i++) {
	if (v[i] == 0) { 
		v[i] = i;
		prime[++m] = i;
	}
	for (int j = 1; j <= m; j++) {
		if (prime[j] > v[i] || prime[j] > n/i) break;
		v[i*prime[j]] = prime[j];
	}
}

}
 
int main()
{
	get_prime(1010);
	int t;
	cin>>t;
	while(t--)
	{
		int n,m;
		cin>>n>>m;
		if(v[n]!=n)
		{
			for(int j=1;j<=m;j++)
			{
				for(int i=1;i<=n;i++)
				{
					b[i][j]=i+(j-1)*n;
				}
			}
		}
		else if(v[m]!=m)
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=m;j++)
				{
					b[i][j]=j+(i-1)*m;
				}
			}
		}
		else
		{
			int mid=1+n>>1;
			c[mid]=n;
			c[mid-1]=1;
			c[mid+1]=2;
			int l=mid-1;
			int r=mid+1;
			while(l>1)
			{
				l--;
				c[l]=c[l+1]+2;
			}
			while(r<n)
			{
				r++;
				c[r]=c[r-1]+2;
			}
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=m;j++)
				{
					b[i][j]=j+(c[i]-1)*m;
				}
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				cout<<b[i][j]<<' ';
			}
			cout<<endl;
		
		}
	}

	return 0;
}

